| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <template>
- <div class="admin--page-content">
- <div class="admin--form">
- <!-- 낚시지역 상세 -->
- <table class="admin--form--table">
- <colgroup>
- <col style="width: 120px;">
- <col>
- </colgroup>
- <tbody>
- <tr>
- <th><div>지역명</div></th>
- <td>{{ formData.name || "-" }}</td>
- </tr>
- <tr>
- <th><div>등록일</div></th>
- <td>{{ formatDateTime(formData.created_at) }}</td>
- </tr>
- <tr>
- <th><div>최근 수정</div></th>
- <td>{{ formatDateTime(formData.updated_at) }}</td>
- </tr>
- </tbody>
- </table>
- <!-- 버튼 영역 -->
- <div class="admin--form-actions">
- <button type="button" class="admin--btn" @click="goToList">
- ← 목록으로
- </button>
- <button type="button" class="admin--btn admin--btn-red-border ml--auto" @click="handleDelete">
- 삭제
- </button>
- <button type="button" class="admin--btn admin--btn-red" @click="goToEdit">
- 수정
- </button>
- </div>
- <!-- 알림 모달 -->
- <AdminAlertModal
- v-if="alertModal.show"
- :title="alertModal.title"
- :message="alertModal.message"
- :type="alertModal.type"
- @confirm="handleAlertConfirm"
- @cancel="handleAlertCancel"
- @close="closeAlertModal"
- />
- </div>
- </div>
- </template>
- <script setup>
- import { ref, onMounted } from "vue";
- import { useRoute, useRouter } from "vue-router";
- import AdminAlertModal from "~/components/admin/AdminAlertModal.vue";
- definePageMeta({
- layout: "admin",
- middleware: ["auth"],
- });
- const route = useRoute();
- const router = useRouter();
- const { get, del } = useApi();
- const areaId = route.params.id;
- const formData = ref({
- name: "",
- created_at: "",
- updated_at: "",
- });
- // 알림 모달
- const alertModal = ref({
- show: false,
- title: "알림",
- message: "",
- type: "alert",
- onConfirm: null,
- });
- const showAlert = (message, title = "알림") => {
- alertModal.value = { show: true, title, message, type: "alert", onConfirm: null };
- };
- const showConfirm = (message, onConfirm, title = "확인") => {
- alertModal.value = { show: true, title, message, type: "confirm", onConfirm };
- };
- const closeAlertModal = () => { alertModal.value.show = false; };
- const handleAlertConfirm = () => {
- if (alertModal.value.onConfirm) alertModal.value.onConfirm();
- closeAlertModal();
- };
- const handleAlertCancel = () => closeAlertModal();
- // 상세 조회
- const loadDetail = async () => {
- const { data, error } = await get(`/area/${areaId}`);
- if (error || !data?.success) {
- showAlert(error?.message || data?.message || "조회에 실패했습니다.", "오류");
- return;
- }
- const row = data.data || {};
- formData.value = {
- name: row.name ?? "",
- created_at: row.created_at ?? "",
- updated_at: row.updated_at ?? "",
- };
- };
- // 삭제
- const handleDelete = () => {
- showConfirm(
- `'${formData.value.name}' 낚시지역을 삭제하시겠습니까?`,
- async () => {
- const { data, error } = await del(`/area/${areaId}`);
- if (error || !data?.success) {
- showAlert(error?.message || data?.message || "삭제에 실패했습니다.", "오류");
- } else {
- showAlert(data.message || "삭제되었습니다.", "성공");
- setTimeout(() => router.push("/site-manager/area/list"), 800);
- }
- },
- "낚시지역 삭제"
- );
- };
- // 이동
- const goToList = () => router.push("/site-manager/area/list");
- const goToEdit = () => router.push(`/site-manager/area/edit/${areaId}`);
- // 일시 포맷
- const formatDateTime = (dateString) => {
- if (!dateString) return "-";
- const date = new Date(dateString.replace(" ", "T"));
- if (isNaN(date.getTime())) return dateString;
- return date.toLocaleString("ko-KR", {
- year: "numeric",
- month: "2-digit",
- day: "2-digit",
- hour: "2-digit",
- minute: "2-digit",
- });
- };
- onMounted(() => {
- loadDetail();
- });
- </script>
|